package generics;

public class TestJavaGenerics {
    public static void main(String[] args) {
        JavaAUser aUser = new JavaAUser();
        aUser.setAnimalInfo("旺旺", 6);
        aUser.printAnimalInfo();

        JavaBUser bUser = new JavaBUser();
        bUser.setAnimalInfo("喵喵", 2);
        bUser.printAnimalInfo();

        JavaCUser cUser = new JavaCUser();
        cUser.setAnimalInfo("c 旺旺",3);
        cUser.printAnimalInfo();
        //    JavaAUser , printAnimalInfo mAnimal getName = 旺旺 , getAge() = 6
        //
        //    JavaBUser , printAnimalInfo mAnimal getName = 喵喵 , getAge() = 2
        //
        //    JavaBaseUser  getGenericSuperclass 不是 ParameterizedType , getSimpleName: Class , getTypeName: generics.JavaAUser
        //
        //    JavaCUser , printAnimalInfo mAnimal == null ， 打印失败

        // JavaCUser 继承 JavaAUser ， 没有传泛型参数，

        /*

                总结： 子类继承父类，父类的父类有泛型参数，父类传泛型参数了，子类没有传泛型参数，getClass().getGenericSuperclass() 直接返回子类的父类，所以不是 ParameterizedType 类型

                查看 getGenericSuperclass 源码

                查看 ParameterizedType，从当前的类查看参数化类型

         */


    }
}
